﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace AI_Bots
{
    abstract class Objeto//Sprite
    {
        protected GameWindow Window;
        protected Texture2D imagem;
        protected Vector2 posicao;
        public Vector2 Posicao
        {
            get
            {
                return posicao;
            }
            set
            {
                posicao = value;
            }
        }
        protected Vector2 velocidade;
        protected Rectangle origem;
        protected Rectangle destino;
        protected float rotacao;
        protected Vector2 pivo;
        protected bool direita;
        public bool visivel;
        protected float camada;
        protected float alfa;
        protected Color cor;
        public bool andando2;

        protected Rectangle colisao;

        public Rectangle Colisao
        {
            get
            {
                return colisao;
            }
            set
            {
                colisao = value;
            }

        }

        public struct animacao
        {
            public int quadro_X;
            public int quadro_Y;
            public int qtd_quadros;
            public int quadros_seg;
            public int Y;
            public string nome;

        }

        public Objeto(Texture2D imagem, GameWindow Window)
        {
            this.imagem = imagem;
            this.Window = Window;
            this.visivel = true;
            this.alfa = 1;
            direita = true;
        }

        public bool testColisao(Objeto destino)
        {
            if (this.Colisao.Intersects(destino.Colisao))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public abstract void Update(GameTime gameTime);

        public void Draw(GameTime gameTime, SpriteBatch spriteBatch, animacao _animacao)
        {
            if (andando2)
            {
                int frame = (int)(gameTime.TotalGameTime.TotalSeconds * _animacao.quadros_seg) % _animacao.qtd_quadros;

                spriteBatch.Draw(
                        imagem,
                        new Rectangle(
                            (int)posicao.X,
                            (int)posicao.Y,
                            _animacao.quadro_X,
                            _animacao.quadro_Y),
                        new Rectangle(
                            frame * _animacao.quadro_X,
                            _animacao.Y,
                            _animacao.quadro_X,
                            _animacao.quadro_Y),
                        new Color(
                            1.0f * alfa,
                            1.0f * alfa,
                            1.0f * alfa,
                            alfa),
                        rotacao,
                        pivo,
                        (direita) ? SpriteEffects.None : SpriteEffects.FlipHorizontally,
                        camada);
            }
            else
            {
                int frame = (int)(gameTime.TotalGameTime.TotalSeconds * _animacao.quadros_seg) % 1;

                spriteBatch.Draw(
                        imagem,
                        new Rectangle(
                            (int)posicao.X,
                            (int)posicao.Y,
                            _animacao.quadro_X,
                            _animacao.quadro_Y),
                        new Rectangle(
                            frame * _animacao.quadro_X,
                            _animacao.Y,
                            _animacao.quadro_X,
                            _animacao.quadro_Y),
                        new Color(
                            1.0f * alfa,
                            1.0f * alfa,
                            1.0f * alfa,
                            alfa),
                        rotacao,
                        pivo,
                        (direita) ? SpriteEffects.None : SpriteEffects.FlipHorizontally,
                        camada);
            }
        }
    }
}
